#include "disciplina.h"

int create_disciplina(FILE *f) {

    Disciplina new;

    printf("digite o id do curso:\n");
    scanf("%d", &new.curso_id);
    new.id = next_sequence(DISCIPLINA_SEQ);
    if (new.id != NOT_FOUND) {
        printf("digite o nome da disciplina:\n");
        ler(new.descricao);
        printf("Digite o semestre do curso\n");
        scanf("%d", &new.semestre);
        fseek(f, 0, SEEK_END);
        fwrite(&new, sizeof (Disciplina), 1, f);
        return PROC_SUCCESS;
    } else {
        printf(CREATE_ERROR, "DISCIPLINA");
        return PROC_FAILURE;
    }
}

void list_by_curso(FILE *f) {
    Disciplina aux;

    int curso_id;
    printf("Digite o Id do curso que deseja obter as disciplinas\n");
    scanf("%d", &curso_id);
    fseek(f, 0, SEEK_SET);
    while (fread(&aux, sizeof (Disciplina), 1, f) == 1) {
        if (aux.curso_id == curso_id) {
            printf("ID do curso:%d \n ID da disciplina:%d \n Nome da disciplina:%s \n Semestre:%d \n", aux.curso_id, aux.id, aux.descricao, aux.semestre);
        }
    }
}

void list_by_semestre(FILE *f) {
    Disciplina aux;

    int semestre;
    int curso_id;
    printf("Digite o semestre que deseja obter as disciplinas\n");
    scanf("%d", &semestre);
    printf("Digite o ID do curso que deseja visualizar as disciplinas do semestre %d:\n", semestre);
    scanf("%d", &curso_id);
    fseek(f, 0, SEEK_SET);
    while (fread(&aux, sizeof (Disciplina), 1, f) == 1) {
        if (aux.semestre == semestre && aux.curso_id == curso_id) {
            printf("ID do curso:%d \n ID da disciplina:%d \n Nome da disciplina:%s \n Semestre:%d \n", aux.curso_id, aux.id, aux.descricao, aux.semestre);
        }
    }
}

void list_by_id(FILE *f) {
    Disciplina aux;

    int id;
    printf("Digite o Id da disciplina que deseja obter\n");
    scanf("%d", &id);
    fseek(f, 0, SEEK_SET);
    while (fread(&aux, sizeof (Disciplina), 1, f) == 1) {
        if (aux.id == id) {
            printf("ID do curso:%d \n ID da disciplina:%d \n Nome da disciplina:%s \n Semestre:%d \n", aux.curso_id, aux.id, aux.descricao, aux.semestre);
        }
    }
}

void update_disciplina(FILE *f) {

    int id;
    int semestre;
    char descricao[255];
    int curso_id;

    Disciplina new;

    printf("Entre com o ID da disciplina que deseja alterar: \n");
    scanf("%d", &id);

    fseek(f, 0, SEEK_SET);
    while (!feof(f)) {
        fread(&new, sizeof (Disciplina), 1, f);
        if (new.id == id) {
            printf("Disciplina cadastrada.\n");
            printf("Digite qual será o novo id do curso referente a disciplina\n");
            scanf("%d", &curso_id);
            new.curso_id = curso_id;
            printf("Digite o novo nome da disciplina\n");
            ler(descricao);
            strcpy(new.descricao, descricao);
            printf("Digite o novo semestre referente a disciplina\n");
            scanf("%d", &semestre);
            new.semestre = semestre;
            fseek(f, -1 * sizeof (Disciplina), SEEK_CUR);
            fwrite(&new, sizeof (Disciplina), 1, f);
            break;
        }
    }
}